【레포트】거기 Dockerfile 작성하고 있는 분 잠깐만요, 그 컨테이너는 안전한가요? DEV-01 #AWSSummit
안녕하세요, 서은우입니다.
2022년 5월25 - 26일, 2일간 진행된 AWS Summit Online 2022 의 세션 리포트입니다. 일본에서 진행된 Summit Online은 어떤 세션이 있는지 한국분들과 공유하기 위해서 작성을 해보았습니다. 관련 세션은 링크를 통해 확인할 수 있기에 일본어로 진행되지만 관심이 있으신 분들은 보셔도 좋을 것 같습니다.
세션 개요
컨테이너 이미지 작성 시 과제나 보다 안전한 컨테이너 이미지 작성을 위한 포인트, 컨테이너 이미지 작성 보조 도구에 대해 Demo를 통해 알아가봅시다.
발표자
- AWS Cloud Application Architect 杉田 想土
- AWS Cloud Application Architect 高橋 たま
세션 레벨
Level 200: 초급자
레포트
고객의 요구
- Amazon ECS on Fargate를 사용하여 웹 서비스를 출시하고 싶습니다.
- 컨테이너 개발 경험이 없기 때문에 특히 보안 및 Docker 파일을 만드는 데 걱정됩니다.
가지고 있는 과제
- 컨테이너 보안의 전반적인 모습을 잘 모른다
- 기반 팀, 개발 팀 등 Docker 파일의 책임의 소재가 모호하다
- Docker 파일 개선
컨테이너 보안의 전체 이미지
- 컨테이너 보안의 전반적인 이미지는 NIST SP800-190을 참고하면 이해할 수 있습니다.
Docker 파일의 책임 위치가 모호하다
- Docker 파일, ECS 작업 정의, ECS 서비스 정의와 관련하여 책임의 범위를 명확히해야합니다
Docker 파일 개선
- 보다 안전한 컨테이너 이미지
- 필요한 최소한의 구성 요소
- 필요한 최소 권한
- 취약한 구성 요소를 정기적으로 확인
- 「The Twelve俺たちのDockerfuleベストプラクティス」를 참고
Docker 파일 개선 Demo
- Cloud9에서 데모 진행
- Docker image 빌드
- 프리뷰 기능으로 만든 이미지를 확인
- 상대 경로
- WORKDIR에서 작업할 위치를 명시하기
- 최소 레이어
- RUN 정리하기
- yum clean all 하기
- COPY 와 ADD 명령
- COPY: 그냥 복사만
- ADD : 다른 파일을 확장하고 원격으로 파일을 가져옵니다.
- 테스트 환경과 프로덕션 환경은 동일한 이미지를 사용해도 괜찮음
- 애플리케이션 종속성에 유의해야합니다.
- 권한은 최소화
- USER에서 루트가 아닌 사용자를 지정
기본 이미지 OS 선택
- 요구 사항에 따라 선택
- 언어 런타임 도입 방법
- a. 스스로 도입
- 이미지를 완전히 제어 가능
- b. 언어 런타임 도입된 이미지 선택
- 전문가에 의해 최적화된 이미지를 사용 가능
- a. 스스로 도입
이미지 변경 Demo
- 이미지 태그 지정
- ECR First
- 공식 이미지를 ECR에서 다운로드할 수 있으면 그쪽을 우선한다
컨테이너 이미지 생성 보조 도구
- hadolint
- Dockerfile의 정적 분석
- Dockle
- 컨테이너 이미지의 정적 분석
컨테이너 이미지의 취약성 스캔 도구
- Trivy
- OS 패키지 및 언어별 종속성에 대한 스캔
- Dockerfile을 포함한 IaC의 정적 분석
- Amazon ECR - 이미지 스캔 기능
- 이미지를 push한 타이밍이나 수동으로 OSS의 CoreOS Clair project를 사용한 스캔 (Basic scanning)
- Amazon Inspector에서 프로그래밍 언어 패키지를 포함한 스캔 (Enhanced scanning)
Dockerfile을 사용하지 않는 이미지 작성 방법
- Cloud native Buildpacks(CNB)
- 애플리케이션 소스 코드를 OCI 호환 컨테이너 이미지로 변환 가능
- Jib
- Maven 또는 Gradle 플러그인
- AWS App2Container
- Dockerfile를 포함한 일련의 아티팩트 출력
- AWS App Runner
- 컨테이너화된 웹 앱과 API를 쉽고 빠르게 배포
마지막으로
저도 컨테이너에 대한 지식이 없었기 때문에 매우 도움이되었습니다.
특히 Demo도 함께 했으므로 설명하기 쉬웠고, 관련 툴도 소개되고 있어 개발시 도움이 될 것 같습니다.
일본어로 진행되어서 제약이 있다고 생각이 되지만, 컨테이너 초보자가 참고하기에 많은 도움이 되는 세션이라고 생각합니다.